package com.ygqh.baby.service;

import com.ygqh.baby.ao.*;
import com.ygqh.baby.model.AgentUserModel;
import com.ygqh.baby.model.YgUserRecommendModel;
import com.ygqh.baby.po.YgAgentInviteRecord;
import com.ygqh.baby.po.YgUser;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface YgAgentInviteRecordService {

	List<YgAgentInviteRecord> find();

	int findCount();

	YgAgentInviteRecord findById(Long id);

	int deleteSoft(Long[] ids);

	int deleteSoft(Long id);

	int save(YgAgentInviteRecord ygAgentInviteRecord);

	int update(YgAgentInviteRecord ygAgentInviteRecord);

	int saveOrUpdate(YgAgentInviteRecord ygAgentInviteRecord);

	ResultSet<AgentUserModel> search(QueryInfo queryInfo, String nickName, String userName, Date startDate,
									 Date endDate, Date orderStartDate, Date orderEndDate, Long levelId);

	/**
	 * 获取用户代理领取记录
	 *
	 * @param receiveUserId
	 * @return
	 */
	List<YgAgentInviteRecord> findByReceiveUserId(Long receiveUserId);

	/**
	 * 获取用户有效代理领取记录
	 *
	 * @param id
	 * @return
	 */
	YgAgentInviteRecord findValidByReceiveUserId(Long receiveUserId);

	/**
	 * 无需邀请成为代理
	 *
	 * @param user
	 * @param currentTime
	 * @param expireTime
	 * @param inviteType
	 * @return
	 */
	Message rechargeUserAgentBySelf(YgUser user, Date currentTime, Date expireTime, InviteType inviteType);

	/**
	 * @param userId     邀请用户id
	 * @param inviteCode 邀请码
	 * @return
	 */
	YgAgentInviteRecord findByInviteCode(String inviteCode);

	/**
	 * @param userIdList 邀请用户id集
	 * @param startDate  创建时间的开始时间
	 * @param endDate    创建时间的结束时间
	 * @return
	 */
	List<YgAgentInviteRecord> findByUserIdListAndBetweenTime(List<Long> userIdList, Date startDate, Date endDate);

	/**
	 * 批量保存
	 *
	 * @param recordList
	 * @return
	 */
	int addBatch(List<YgAgentInviteRecord> recordList);

	/**
	 * 获取邀请用户列表
	 *
	 * @param userId
	 * @return
	 */
	List<AgentUserModel> findReceiveListByUserId(Long userId);

	/**
	 * 获取邀请码列表
	 *
	 * @param userId
	 * @return
	 */
	List<YgAgentInviteRecord> findInviteCodeListByUserId(Long userId);

	/**
	 * 邀请码成为代理
	 *
	 * @param inviteCode    邀请码
	 * @param receiveUserId 领取用户id
	 * @return
	 */
	Message rechargeUserAgent(String inviteCode, Long userId);

	/**
	 * 为代理用户生成邀请码
	 *
	 * @param user
	 * @return
	 */
	List<YgAgentInviteRecord> generateInviteCode(YgUser user, int count);

	/**
	 * 手动为代理用户生成当月邀请码
	 *
	 * @param userId
	 * @return
	 */
	int generateInviteCodeToUser(Long userId);

	/**
	 * 添加取消代理资格定时任务
	 *
	 * @param userId
	 * @param trueName
	 * @return
	 */
	Message addCancelAgentJob(Long userId, String trueName);

	/**
	 * 取消代理资格
	 *
	 * @param id
	 * @param cancelBy
	 */
	void cancelAgent(Long id, String cancelBy);

	/**
	 * 为指定用户生成指定月份的邀请码
	 *
	 * @param user
	 * @param currentMonth
	 * @return
	 */
	int generateInviteCodeToUser(YgUser user, Date currentMonth);

	/**
	 * 立即成为新代理
	 *
	 * @param userId
	 * @return
	 */
	Message rechargeUserAgentRightNow(Long userId, Boolean containOrdinaryUser);

	/**
	 * 充值成为代理
	 *
	 * @param userId
	 * @param currentDate
	 * @return
	 */
	Message addPayRecordBySelf(Long userId, Date paidTime);

	/**
	 * 申请成为代理
	 * <p>
	 * 只有女王才有申请资格。且无需审核，代理有效期为女王有效期。
	 *
	 * @param id 用户id
	 * @return Message    返回类型
	 * @throws
	 * @Title: applyToAgent
	 * @author （guohao）
	 * @date 2018年11月16日 下午2:47:57
	 * @version V1.0
	 */
	Message applyToAgent(Long id);

	/**
	 * 推荐用户统计
	 *
	 * @param userId     用户id
	 * @param platformNo 平台NO
	 * @return 统计数据
	 */
	Map<String, Object> findRecommendUserCount(Long userId, String platformNo);

	/**
	 * 获取推荐用户
	 *
	 * @param queryInfo  分页数据
	 * @param user       用户
	 * @param platformNo 平台NO
	 * @return 推荐用户集
	 */
	List<YgUserRecommendModel> findRecommendUser(QueryInfo queryInfo, YgUser user, String platformNo);

	YgAgentInviteRecord findRecordForYijiandian(Long receiveUserId);

	/**
	 * 来源source(壹家店代理)
	 *
	 * @param user     当前用户
	 * @param fromCode 来源source(支持邀请码的方式解析和用户表真实source)
	 */
	void processFromCodeByUserAgent(YgUser user, String fromCode);

    Message bindShareUserAndFans(YgUser currentUser, YgUser shareUser);

    /**
	 * 校验当前用户是否有成为会员的资格
	 *
	 * @param user          当前用户
	 * @param platformNo    平台NO
	 * @param salesPlatform 平台类型
	 * @return
	 */
	ResponseEntity validateUserForUserAgent(YgUser user, String platformNo, SalesPlatform salesPlatform);

	ResultSet<YgUser> searchRecommendUser(QueryInfo queryInfo, Long userId);
}
